package com.googlecode.allinclusive.fw.database.ibatis;

import java.util.List;

@SuppressWarnings("rawtypes")
public interface EntityManager {

	/**
	 * 执行SQL,返回单条指定类型的对象
	 * @param sqlID SQL-ID
	 * @param bindParams SQL参数
	 * @param clazz 返回类型
	 * @return SQL执行结果
	 */
	public <E> E executeForObject(String sqlID, Object bindParams, Class clazz);

    /**
     * 执行SQL,返回多条指定类型的对象数组
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @param clazz 返回类型
     * @return SQL执行结果
     */
	public <E> E[] executeForObjectArray(String sqlID, Object bindParams, Class clazz);

    /**
     * 执行SQL,返回多条指定类型的对象数组
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @param clazz 返回类型
     * @param beginIndex 开始索引
     * @param maxCount 最大件数
     * @return SQL执行结果
     */
	public <E> E[] executeForObjectArray(String sqlID, Object bindParams, Class clazz, int beginIndex, int maxCount);

    /**
     * 执行SQL,返回多条指定类型的对象List
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @return SQL执行结果
     */
    public <E> List<E> executeForObjectList(String sqlID, Object bindParams);

    /**
     * 执行SQL,返回多条指定类型的对象List
     * @param sqlID SQL-ID
     * @param bindParams SQL参数
     * @param beginIndex 开始索引
     * @param maxCount 最大件数
     * @return SQL执行结果
     */
    public <E> List<E> executeForObjectList(String sqlID, Object bindParams, int beginIndex, int maxCount);

	/**
	 * 执行更新SQL
	 * @param sqlID SQL-ID
	 * @param bindParams SQL参数
	 * @return 更新记录数
	 */
    public int executeUpdate(String sqlID, Object bindParams);

    /**
     * 批处理方式执行更新SQL
     * @param sqlHolders
     * @return　更新记录数
     */
    public int executeBatch(List<SQLHolder> sqlHolders); 
    
	/**
	 * 调用存储过程
	 * @param sqlID  SQL-ID
	 * @param bindParams SQL参数
	 */
    public void callProcedure(String sqlID, Object bindParams);    
}
